#ifndef __CC_XML_PARSER_H__
#define __CC_XML_PARSER_H__

#include "list.h"

struct xml_doc;
struct xml_node;
struct xml_attr;

const char* xml_node_name(const struct xml_node*);
const struct xml_node* xml_node_next(const struct xml_node*);
const struct xml_node* xml_node_prev(const struct xml_node*);
const struct xml_node* xml_node_parent(const struct xml_node*);
const struct xml_node* xml_node_child(const struct xml_node*);
const struct xml_node* xml_node_child_search(const struct xml_node*, const char* name);
const struct xml_attr* xml_node_attrib(const struct xml_node*);
const struct xml_attr* xml_node_attrib_search(const struct xml_node*  p, const char* name);
const char* xml_node_attrib_value(const struct xml_node* p, const char* attrib_name);
void xml_node_free(struct xml_node* p);
void xml_node_child_print(const struct xml_node* p);



const char* xml_attrib_name(const struct xml_attr*);
const char* xml_attrib_value(const struct xml_attr*);
const int xml_attrib_value_len(const struct xml_attr*  p);
const struct xml_attr* xml_attrib_next(const struct xml_attr*, const struct xml_attr* cur);
const struct xml_attr* xml_attrib_prev(const struct xml_attr*, const struct xml_attr* cur);



//
// Parse XML file
//
struct xml_doc* xml_doc_open(const char* filename);
void xml_doc_close(struct xml_doc* p);
struct xml_node* xml_doc_parse(struct xml_doc*);

#endif

